import java.awt.*;
import javax.swing.*;

/**
* @file JDisplay.java
*
* @brief Diese Datei enthält die JDisplay-Klasse.
*
* @author Alrik Künne
*
* @date 01.06.2012 - erste Version
* @date 19.06.2012 - einige Veränderungen, Multi-Threading
**/

/** 
* @class JDisplay
* 
* @brief Ein eigenes Oberflächenelement mit abgerundeten Ecken
* 
* Das ist ein eigenes Panel, mit abgerundeten Ecken.
* Es stellt die Displays der Liftanlage dar.
* Diese Klasse stammt auf dem Projekt Stoppuhr von Tim und Alrik.
*/ 
@SuppressWarnings("serial")
public class JDisplay extends JPanel{
	private JLabel label;
	private int arrowing;
	
	/**
	 * @brief Der Konstruktor mit einem Parameter
	 *
	 * @param string - Der Text, der auf dem Display dargestellt werden soll
	 * 
	 * initialisiert das Panel und schaltet die Pfeile aus
	 */
	public JDisplay(String string) {
		super();
		init(string);
	}
	
	/**
	 *@brief Der Konstruktor ohne Parameter
	 * 
	 * initialisiert das Panel und schaltet die Pfeile aus, auf dem Display erscheint "Außer Betrieb"
	 */
	public JDisplay(){
		super();
		init("AUßER BETRIEB");
	}
	
	/**
	 *@brief Diese Methode schaltet im Display den Pfeil nach oben an.
	 * 
	 * schaltet im Display den Pfeil nach oben an und den Pfeil nach unten aus
	 */
	public void showuparrow(){
		arrowing=1;
		repaint();
	}
	
	/**
	 *@brief Diese Methode schaltet im Display den Pfeil unten an.
	 * 
	 * schaltet im Display den Pfeil nach unten an und den Pfeil nach oben aus
	 */
	public void showdownarrow(){
		arrowing=-1;
		repaint();
	}
	
	/**
	 *@brief Diese Methode schaltet im Display den Pfeil aus.
	 * 
	 * schaltet im Display den Pfeil nach oben oder unten aus
	 */
	public void hidearrows(){
		arrowing=0;
		repaint();
	}
	
	/**
	 *@brief Diese Methode initialisiert das Display.
	 *
	 * @param string - der Starttext
	 * 
	 * Stellt im Display die Fonts und Farben ein und ertellt das Textlabel, schaltet die Pfeile aus
	 */
	private void init(String string){
		hidearrows();
		label=new JLabel();
		label.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 20));
		label.setForeground(Color.red);
		label.setText(string);
		add(label);
	}
	
	/**
	 *@brief Diese Methode zeigt einem bestimmten Text im Display.
	 *
	 * @param string - der Text
	 * 
	 * Stellt im Display den Text dar.
	 */
	public void setText(String string){
		label.setText(string);
	}
	
	/**
	 *@brief Diese Methode zeigt im Display eine bestimmte Etage an.
	 *
	 * @param Etage - Die Nummer der anzuzeigenden Etage
	 * 
	 * Stellt im Display die Etage in der Form "<Etagennummer>.Etage" dar.
	 */
	public void setEtage(int Etage){
		label.setText(Integer.toString(Etage)+".Etage");	
	}

	/**
	 *@brief Diese Methode gibt den Displaytext zurück.
	 * 
	 * @return String - den Text im Display
	 * 
	 * Stellt im Display die Etage in der Form "<Etagennummer>.Etage" dar.
	 */
	public String getText(){
		return label.getText();
	}
		
	/**
	 *@brief Diese Methode zeichnet das Display.
	 *
	 * @param g - die Grafik, auf die gezeichnet wird
	 * 
	 * Diese Methode wird aufgerufen, wenn eine Neuzeichnung notwendig ist, z.B. Beim verändern der Fenstergröße oder wenn ein Pfeil dargestellt werden soll.
	 * Hier werden die abgerundeten Ecken erzeugt und die Pfeile je nach Zustand.
	 */
	public void paintComponent(final Graphics g) {
		//* Abgerundete Eck
		g.setColor(getBackground());
		g.fillRect(0, 0, getBounds().width, getBounds().height);
		g.setColor(Color.black);
		g.fillRoundRect(0,0,this.getBounds().width, this.getBounds().height,20, 20);
		//* Pfeile
		g.setColor(Color.red);
		Stroke stroke = new BasicStroke( 3 );
		
		Graphics2D g2 = (Graphics2D) g;
		g2.setStroke(stroke);

		if(arrowing==1){
			
			g2.drawLine(getBounds().width-20, 5, getBounds().width-20, getBounds().height-5);
			g2.drawLine(getBounds().width-20, 5, getBounds().width-30, 20);
			g2.drawLine(getBounds().width-20, 5, getBounds().width-10, 20);
		}else if(arrowing == -1){
			g2.drawLine(getBounds().width-20, 5, getBounds().width-20, getBounds().height-5);
			g2.drawLine(getBounds().width-20, getBounds().height-5, getBounds().width-30, getBounds().height-25);
			g2.drawLine(getBounds().width-20, getBounds().height-5, getBounds().width-10, getBounds().height-25);
		}
		
		
	}
}
